package com.rytx.common.utils;

import com.alibaba.fastjson2.JSONObject;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class AilUtils {

    public static JSONObject getJsonObject(String artName, String orderNo, String outTradeNo) {
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_order_no", orderNo);
        bizContent.put("out_request_no", outTradeNo);
        bizContent.put("order_title", artName);
        bizContent.put("amount","0.01");//取值范围：[0.01,100000000.00]
        bizContent.put("product_code","PREAUTH_PAY");//PREAUTH_PAY
        //// 设置扩展参数
        JSONObject extraParam = new JSONObject();
        //extraParam.put("category",myAliPayConfig.getCategory());//授权业务对应的类目：必传，value 为业务分类，例如：充电桩业务传 CHARGE_PILE_CAR 。参考：https://opendocs.alipay.com/open/10719  	ZMSC_1_37_1  ZMSC_1_37_3 RENT_GREEN_PLANT
        extraParam.put("category","RENT_GREEN_PLANT");//[{"categoryCode":"[RENT_GREEN_PLANT]"},{"categoryCode":"[ZMSC_1_37_1]"},{"categoryCode":"[ZMSC_1_37_3]"}]
        extraParam.put("serviceId","2024040400000000000094888100");//信用服务ID：必传。信用服务 ID  需要商家在 开放平台-芝麻免押-信用服务管理 创建信用服务获取。在创建过程中如果有其它疑问，可以咨询芝麻客服小二（0571-88158055 转 2）。
        bizContent.put("extra_param",extraParam);
        return bizContent;
    }

    /**
     * 将字节数组转为十六进制字符串
     *
     * @param bytes
     * @return
     */
    private static String convertByteToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        String byteString;
        for (byte aByte : bytes) {
            //byte转为int时高位补零
            byteString = Integer.toHexString(aByte & 0xFF);
            if (byteString.length() == 1) {
                //补齐2位
                sb.append("0");
            }
            sb.append(byteString);
        }
        return sb.toString();
    }

    /*******以下为identity_hash生成加密串的方法示例，无实名校验诉求可忽略********/
    /**
     * 根据给定的一个或多个字符串获得摘要
     * 使用SHA256摘要方式与UTF8编码,返回十六进制的字符串
     *
     * @param strsToBeDigest
     * @return  十六进制的字符串
     */
    public static String genHashCode(String algorithmType, String charset, String... strsToBeDigest) {
        //拼接字符串,再hash
        StringBuilder sb = new StringBuilder();
        for (String str : strsToBeDigest) {
            sb.append(str);
        }
        String identity = sb.toString();
        MessageDigest messageDigest;
        String hashResult = "";
        try {
            messageDigest = MessageDigest.getInstance(algorithmType);
            byte[] bytes = messageDigest.digest(identity.getBytes(charset));
            hashResult = convertByteToHexString(bytes);
        } catch (NoSuchAlgorithmException e) {
            System.out.println("获得实名hash值出错,无此hash算法");
        } catch (UnsupportedEncodingException e) {
            System.out.println("获得实名hash值出错,不支持此编码");
        }
        return hashResult;
    }
}
